import java.awt.Dimension;
import java.awt.image.BufferedImage;
import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamResolution;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
public class WebCamService extends Service<Image> {
private final Webcam cam ;
private final WebcamResolution resolution ;
public WebCamService(Webcam cam, WebcamResolution resolution) {
this.cam = cam ;
this.resolution = resolution;
cam.setCustomViewSizes(new Dimension[] {resolution.getSize()});
cam.setViewSize(resolution.getSize());
}
public WebCamService(Webcam cam) {
this(cam, WebcamResolution.QVGA);
}
@Override
public Task<Image> createTask() {
return new Task<Image>() {
@Override
protected Image call() throws Exception {
try {
cam.open();
while (!isCancelled()) {
if (cam.isImageNew()) {
BufferedImage bimg = cam.getImage();
updateValue(SwingFXUtils.toFXImage(bimg, null));
}
}
System.out.println("Cancelled, closing cam");
cam.close();
System.out.println("Cam closed");
return getValue();
} finally {
cam.close();
}
}
};
}
public int getCamWidth() {
return resolution.getSize().width ;
}
public int getCamHeight() {
return resolution.getSize().height ;
}
}